package com.member.shop.domain;

import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.annotation.*;
import com.member.common.annotation.Excel;
import com.member.common.core.domain.BaseEntity;
import com.member.shop.vo.SpecsData;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 商品对象 sys_biz_goods
 *
 * @author lixinchen
 * @date 2024-01-05
 */
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_biz_goods")
public class SysBizGoods extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 唯一id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 商品编号
     */
    @Excel(name = "商品编号")
    private String goodsCode;

    /**
     * 商品名称
     */
    @Excel(name = "商品名称")
    private String name;

    /**
     * 商品分类id
     */
    @Excel(name = "商品分类id")
    private Long categoryId;
    /**
     * 商品二级分类id
     */
    @Excel(name = "商品二级分类id")
    private Long categoryTwoId;
    /**
     * 商品状态(0:上架，1：下架)
     */
    @Excel(name = "商品状态(0:上架，1：下架)")
    private Long grounding;
    /**
     * 属性标签(多个逗号隔开)
     */
    @Excel(name = "属性标签(多个逗号隔开)")
    private String propTags;

    /**
     * 视频地址
     */
    @Excel(name = "视频地址")
    private String videoUrl;

    /**
     * 视频类型（0 没有 1 内部视频 2 外部链接）
     */
    @Excel(name = "视频类型（0 没有 1 内部视频 2 外部链接）")
    private Integer videoType;
    /**
     * 排序值
     */
    @Excel(name = "排序值")
    private Long orderNum;

    /**
     * 是否商城推荐
     */
    @Excel(name = "是否商城推荐")
    private Integer isRecommend;
    /**
     * 运营标签 （ 1 限时抢购 2新品促销 3热销商品）
     */
    @Excel(name = "运营标签 （1限时抢购 2新品促销 3热销商品）")
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Integer tag;


    /**
     * 是否商城推荐
     */
    @Excel(name = "是否积分商品")
    private Integer isScore;
    /**
     * 商品封面
     */
    @Excel(name = "商品封面")
    private String cover;

    /**
     * 商品图片
     */
    @Excel(name = "商品图片")
    private String pics;

    /**
     * 虚拟销量
     */
    @Excel(name = "虚拟销量")
    private Long actualSales;

    /**
     * 商品描述
     */
    @Excel(name = "商品描述")
    private String goodsDescribe;

    /**
     * 商品详情
     */
    @Excel(name = "商品详情")
    private String details;
    /**
     * 服务
     */
    @Excel(name = "服务")
    private String service;
    /**
     * 配送
     */
    @Excel(name = "配送")
    private String delivery;
    /**
     * 规格json
     */
    @Excel(name = "规格json")
    private String specsData;

    /**
     * 是否删除(0：未删除，1：删除)
     */
    @Excel(name = "是否删除(0：未删除，1：删除)")
    private Integer deleted;


    /**
     * 规格组合
     */
    @TableField(exist = false)
    private List<SpecsData> specsDataList;

    /**
     * 实际销量
     */
    @Excel(name = "实际销量")
    @TableField(exist = false)
    private Long salesCount;


    /**
     * 库存总数
     */
    @Excel(name = "库存")
    @TableField(exist = false)
    private Long stockCount;

    /**
     * 分类名称（组合）
     */
    @TableField(exist = false)
    private String categoryName;

    /**
     * 一级分类名称
     */
    @TableField(exist = false)
    private String firstCategoryName;

    /**
     * 二级分类名称
     */
    @TableField(exist = false)
    private String secondCategoryName;


    /**
     * 一级分类id
     */
    @TableField(exist = false)
    private Long firstCategoryId;

    /**
     * 二级图册id
     */
    @TableField(exist = false)
    private Long secondCategoryId;

    /**
     * 规格组合
     */
    @TableField(exist = false)
    private List<SpecsData> specsList;

    /**
     * 价格
     */
    @TableField(exist = false)
    private BigDecimal price;

    /**
     * 实际销量
     */
    private Long realitySales;

    public void setSpecsData(String specsData) {
        this.specsData = specsData;
        List<SpecsData> specsDatas = new ArrayList<>();
        if (StringUtils.isNotEmpty(this.specsData)) {
            List<Object> dataList = JSON.parseArray(specsData, SpecsData.class);
            for (Object o : dataList) {
                SpecsData item = (SpecsData) o;
                specsDatas.add(item);
            }
            this.specsList = specsDatas;
        }
    }

    /**
     * 促销开始时间
     */
    private Date promoStartTime;

    /**
     * 促销截止时间
     */
    private Date promoEndTime;

    /**
     * 产品特征
     */

    private String features;

    /**
     * 适用范围
     */
    private String applyScope;
    private BigDecimal maxSalesPrice;
    private BigDecimal minSalesPrice;

    private BigDecimal minMarketPrice;
    private BigDecimal maxMarketPrice;

    /**
     * 最小单位
     */
    private String unit;


    /**
     * 累计总库存
     */
    private Long stock;

    /**
     * 入库库存
     */
    private Long inventoryStock;

    /**
     * 已冻结库存
     */
    private Long frozenStockCount;


    /**
     * 销量
     */
    private Long sales;


    /**
     * 销量
     */
    @TableField(exist = false)
    private Long skuId;

    /**
     * 购物车购买数量
     */
    @TableField(exist = false)
    private Long number;
}
